/**************************************************************
  > File Name: sigset.c
  > Author: LuoLiang
  > Mail: 1204553475@qq.com 
  > Created Time: 2022年02月22日 星期二 11时06分47秒
 **************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

/* 如何忽略或阻塞一个信号 */

void handler(int s)
{
	write(1, "!", 1);
}

int main(int argc, char **argv)
{
	int i, j;
	sigset_t set, oldSet, saveSet;
	
	/* 1.SIG_IGN
	signal(SIGINT, SIG_IGN);
	*/
	
	signal(SIGINT, handler);
	sigemptyset(&set);
	sigaddset(&set, SIGINT);

	sigprocmask(SIG_BLOCK, &set, &saveSet);

	for (i = 0; i < 1000; i++)
	{
		sigprocmask(SIG_BLOCK, &set, &oldSet);
		for (j = 0; j < 5; j++)
		{
			write(1, "*", 1);
			usleep(1000000);
		}
		write(1, "\n", 1);
		sigprocmask(SIG_SETMASK, &oldSet, NULL);
	}
	
	sigprocmask(SIG_SETMASK, &saveSet, NULL);
    exit(0);
}
